package cn.iocoder.yudao.module.wine.service.businessuser;

import java.util.*;
import javax.validation.*;

import cn.iocoder.yudao.module.wine.api.dto.BusinessUserDTO;
import cn.iocoder.yudao.module.wine.controller.admin.businessuser.vo.*;
import cn.iocoder.yudao.module.wine.controller.app.businessuser.vo.*;
import cn.iocoder.yudao.framework.common.pojo.PageResult;

import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;

/**
 * 商家配置 Service 接口
 *
 * @author 管理员
 */
public interface BusinessUserService {

    /**
     * 后台手动创建商家
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createBusinessUser(@Valid BusinessUserSaveReqVO createReqVO);
    /**
     * 创建个人团长
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Integer createTeamUser(@Valid TeamUserSaveReqVO createReqVO);
    /**
     * 更新商家
     *
     * @param updateReqVO 更新信息
     */
    void updateBusinessUser(@Valid BusinessUserSaveReqVO updateReqVO);

    /**
     * 删除商家
     *
     * @param id 编号
     */
    void deleteBusinessUser(Long id);

    /**
     * 获得商家
     *
     * @param id 编号
     * @return 商家配置
     */
    BusinessUserRespVO getBusinessUser(Long id);

    /**
     * 获得商家分页
     *
     * @param pageReqVO 分页查询
     * @return 商家分页
     */
    PageResult<BusinessUserRespVO> getBusinessUserPage(BusinessUserPageReqVO pageReqVO);


    /**
     * 小程序获得信息
     *
     * @param id 编号
     * @return 商家配置
     */
    BusinessUserRespVO appGetBusinessUser(Long id);

    /**
     * 发送验证码
     * @param reqVO
     * @return
     */
    void sendSmsCode(RegisterSmsSendReqVO reqVO);

    /**
     * 验证 验证码
     * @param loginUserId
     * @param reqVO
     */
    void validateSmsCode(Long loginUserId, RegisterSmsSendReqVO reqVO);


    /**
     * 小程序商家入驻
     * @param createReqVO
     * @return
     */
    Integer appCreateBusinessUser(AppBusinessUserSaveReqVO createReqVO);

    /**
     * 修改密码
     * @param passwordVO
     * @return
     */
    Integer updatePassword(AppUserUpdatePasswordVO passwordVO);

    /**
     * 后台 审核商家
     * @param updateReqVO
     */
    void auditBusinessUser(BusinessUserSaveReqVO updateReqVO);

    /**
     * 小程序团长申请
     * @param createReqVO
     * @return
     */
    Integer appCreateBusinessUserTeam(AppBusinessUserSaveReqVO createReqVO);

    /**
     * 获取团长下的商家信息
     * @return
     */
    List<AppBusinessUserRespVO> appGetBusinessUserList(Integer type);

    /**
     * 通过用户手机号查询用户信息
     * @param mobile
     * @return
     */
    AppUserAddressRespVO appGetBusinessUserByMobile(String mobile);

    /**
     * 获取团长收益列表
     * @param settlement
     * @return
     */
    List<AppBusinessUserRespVO> appGetBusinessUserEarningsList(Integer settlement);

    /**
     * 商家认证后申请成为商家团长
     * @param createReqVO
     * @return
     */
    Integer appCreateBusinessUserTeamSimple(AppBusinessUserSaveReqVO createReqVO);

    /**
     * 更新商家
     * @param createReqVO
     * @return
     */
    Integer appUpdateBusinessUser(AppBusinessUserUpdateReqVO createReqVO);

    /**
     * 小程序注册账号时，创建对应商家相关信息
     * @param dto
     * @return
     */
    BusinessUserDTO register(BusinessUserDTO dto);

    void updateUserInfo(BusinessUserDTO dto);

    BusinessUserDTO getUserByUserId(Long userId);

    BusinessUserRespVO getBusinessUserInfo(Long userId);
    /**
     * 通过用户 ID 查询用户们
     *
     * @param ids 用户 ID
     * @return 用户对象信息数组
     */
    List<BusinessUserDTO> getBusinessUserList(Collection<Long> ids);

}
